#ifndef XMLSERVER_HH_
#define XMLSERVER_HH_
#include "Network.hh"
#include <boost/noncopyable.hpp>
#include <QtCore>
#include <QtNetwork>

/**
 * \brief TCP szerver osztály.
 *
 * Feladata a kapcsolatok fogadása, és a többszálú kiszolgálás elindítása.
 */
class Network::XmlServer: public QTcpServer, private boost::noncopyable {
    Q_OBJECT

    protected: static XmlServer* server;

    public:    static XmlServer& instance();
    protected: static void sigint_handler(int unused);
    protected: static void sigterm_handler(int unused);

    /// \brief SSL konfiguráció
    protected: QSslConfiguration sslConfig;

    /// \brief SIGINT socket leírók.
    protected: int sigintfd[2];

    /// \brief SIGTERM socket leírók.
    protected: int sigtermfd[2];

    /// \brief SIGINT socket figyelő.
    protected: QSharedPointer< QSocketNotifier > sigintNotifier;

    /// \brief SIGTERM socket figyelő.
    protected: QSharedPointer< QSocketNotifier > sigtermNotifier;

    protected: XmlServer();
	public:
	void start(u2 port, QString key_path, QString cert_path, QString ca_path);
	public: void stop();
	protected: void incomingConnection(int socketDescriptor);
    protected slots: void sigint(int fd);
    protected slots: void sigterm(int fd);
};

#endif /* XMLSERVER_HH_ */
